import axios from 'axios'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/userStore'
import router from '@/router'

// 根据环境变量判断是开发环境还是生产环境
const isDev = import.meta.env.DEV

// ========== 后台管理接口（端口8081）==========
const adminInstance = axios.create({
    baseURL: isDev ? '/api/admin' : 'http://localhost:8081', // 开发环境用代理，生产环境直接请求
    timeout: 7000,
})

// ========== 前台接口（端口8080）==========
const webInstance = axios.create({
    baseURL: isDev ? '/api/web' : 'http://localhost:8080', // 开发环境用代理，生产环境直接请求
    timeout: 7000,
})

// ========== 请求拦截器 ==========
const setupInterceptors = (instance) => {
    // 请求拦截器 - 添加token等
    instance.interceptors.request.use(
        config => {
            // 从pinia store获取token
            const userStore = useUserStore()
            const token = userStore.getToken
            if (token) {
                config.headers['Authorization'] = `Bearer ${token}`
            }
            return config
        },
        error => {
            return Promise.reject(error)
        }
    )

    // 响应拦截器
    instance.interceptors.response.use(
        response => {
            if (response.data.success) {
                return response.data
            } else {
                if (response.data.errorCode == 401) {
                    ElMessage.error(response.data.message)
                    const userStore = useUserStore()
                    userStore.logout()
                    router.push('/login')
                }
                return Promise.reject(response.data.message)
            }
        },
        error => {
            const userStore = useUserStore()
            // 统一错误处理
            if (error.response) {
                switch (error.response.errorCode) {
                    case 401:
                        ElMessage.error('未授权，请重新登录')
                        // 清除token并跳转到登录页
                        userStore.logout()
                        if (window.location.pathname !== '/admin/login') {
                            window.location.href = '/admin/login'
                        }
                        break
                    case 403:
                        ElMessage.error('拒绝访问')
                        break
                    case 404:
                        ElMessage.error('请求错误，未找到该资源')
                        break
                    case 500:
                        ElMessage.error('服务器错误')
                        break
                    default:
                        ElMessage.error(error.response.data?.message || '请求失败')
                }
            } else {
                ElMessage.error('网络错误，请检查网络连接')
            }
            return Promise.reject(error)
        }
    )
}

// 为两个实例都添加拦截器
setupInterceptors(adminInstance)
setupInterceptors(webInstance)

// 导出两个实例
export { adminInstance, webInstance }

// 默认导出后台管理实例（向后兼容）
export default adminInstance